package jp.ac.u_tokyo.dch.action.front;

import java.util.List;

import jp.ac.u_tokyo.dch.core.db.DBConnection;
import jp.ac.u_tokyo.dch.model.SchemaGroup;
import jp.ac.u_tokyo.dch.model.db.DataDisplays;
import jp.ac.u_tokyo.dch.model.db.DataSchema;
import jp.ac.u_tokyo.dch.service.DaoServiceAware;
import jp.ac.u_tokyo.dch.service.FrontService;
import jp.ac.u_tokyo.dch.service.Transaction;
import jp.ac.u_tokyo.dch.util.common.ModoruUtil;
import jp.ac.u_tokyo.dch.view.Constants;
import jp.ac.u_tokyo.dch.view.front.FrontManageView;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 *
 * @version 1.1
 *
 */
public class FrontManageAction extends ActionSupport implements ModelDriven<FrontManageView>, DaoServiceAware {

	/**
	 *シリアル番号
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 画面モデル
	 */
	private FrontManageView view = new FrontManageView();

	/**
	 * DBコネクションオブジェクト
	 */
	private DBConnection dbConnection = null;

	/**
	 * サービス
	 */
	private FrontService service = null;

	/**
	 * スキーマグループリスト
	 */
	private List<SchemaGroup> schemaGroupList;

	/**
	 * ファイルスキーマリスト
	 */
	private List<DataSchema> fileSchemaList;


	/**
	 *フロント表示リスト
	 */
	private List<DataDisplays> dataDisplaysList;


	/**
	 * 実行タイプ
	 */
	private String actionType;


	/**
	 * 初期化する
	 * @return 結果
	 * @throws Exception 例外
	 */
	public String init() throws Exception {
		return SUCCESS;
	}

	/**
	 * 資料スキーマリストを表示する
	 * @return 結果
	 * @throws Exception 例外
	 */
	public String metaDatalist() throws Exception {

		ModoruUtil.modoruProcess(ServletActionContext.getRequest(), "/outputfront/metadatadisplay", ServletActionContext.getRequest().getQueryString());

		service = new FrontService(dbConnection);

		schemaGroupList = service.getMetaDataPatternList();

		return SUCCESS;
	}
	/**
	 * ファイルスキーマリストを表示する
	 * @return 結果
	 * @throws Exception 例外
	 */
	public String multiDatalist() throws Exception {

		ModoruUtil.modoruProcess(ServletActionContext.getRequest(), "/outputfront/multidatadisplay", ServletActionContext.getRequest().getQueryString());

		service = new FrontService(dbConnection);

		fileSchemaList = service.getFileSchemaDataList();

		return SUCCESS;
	}

	public String frontDisplayList() throws Exception {

		ModoruUtil.modoruProcess(ServletActionContext.getRequest(), "/outputfront/frontDisplayList", ServletActionContext.getRequest().getQueryString());

		service = new FrontService(dbConnection);

		dataDisplaysList = service.getDataDisplaysList(view.getKeySchemaid());

		return SUCCESS;
	}
	@Transaction
	public String displayOrderChange() throws Exception {

		service = new FrontService(dbConnection);

		service.orderChange(view.getOrderChangeId(), view.getDisplayOrderCmd());

		return SUCCESS;
	}

	public String frontAdd() throws Exception {

		actionType = Constants.ADD;

		return SUCCESS;
	}

	public String frontEdit() throws Exception {

		actionType = Constants.MOD;

		service = new FrontService(dbConnection);

		DataDisplays dataDisplays = service.getDataDisplays(view.getDisplayId());

		view.setDisplayName(dataDisplays.getName());

		return SUCCESS;
	}

	public String frontDel() throws Exception {

		service = new FrontService(dbConnection);

		service.delete(view.getDisplayId());

		return SUCCESS;
	}

	/**
	 * 表示設定を行う
	 * @return 結果
	 * @throws Exception 例外
	 */
	public String frontDisplaySetting() throws Exception {

		return SUCCESS;
	}
	/**
	 * 表示設定を保存する
	 * @return 結果
	 * @throws Exception 例外
	 */
	@Transaction
	public String frontDisplayStore() throws Exception {

		service = new FrontService(dbConnection);

		if (Constants.ADD.equals(actionType)) {

			service.insert(view);

		} else if (Constants.MOD.equals(actionType)) {
			service.update(view);
		}

		return SUCCESS;
	}


	/**
	 * スキーマグループリストを返す
	 * @return スキーマグループリスト
	 */
	public List<SchemaGroup> getSchemaGroupList() {
		return schemaGroupList;
	}
	/**
	 * DBコネクションオブジェクトをセットする
	 */
	@Override
	public void setDBConnection(DBConnection con) {
		dbConnection = con;

	}
	/**
	 * ファイルスキーマリストを返す
	 * @return ファイルスキーマリスト
	 */
	public List<DataSchema> getFileSchemaList() {
		return fileSchemaList;
	}

	/**
	 *
	 * @return フロント表示リスト
	 */
	public List<DataDisplays> getDataDisplaysList() {
		return dataDisplaysList;
	}

	/**
	 * @return 画面モデルを返す
	 */
	@Override
	public FrontManageView getModel() {
		return view;
	}

	public String getActionType() {
		return actionType;
	}

	public void setActionType(String actionType) {
		this.actionType = actionType;
	}


}
